package br.com.os2.pacemark.gui;

import br.com.os2.pacemark.dao.ImplanteDAO;
import br.com.os2.pacemark.dao.ProdutoDAO;
import br.com.os2.pacemark.dao.ProdutoUsadoDAO;
import br.com.os2.pacemark.model.Implante;
import br.com.os2.pacemark.model.Produto;
import br.com.os2.pacemark.model.ProdutoUsado;
import br.com.os2.pacemark.util.Mensagem;
import br.com.os2.pacemark.util.MyTableModel;
import java.util.List;
import javax.swing.JOptionPane;

/**
 * Classe que representa a tela para listagem de implantes.
 * 
 * @author Daniel
 * 
 */
public class Implantes extends javax.swing.JDialog {

    /**
     * Variável usada para operações relacionadas oa banco de dados
     */
    private ImplanteDAO implanteDAO;

    public Implantes(java.awt.Frame parent, boolean modal) {

        super(parent, modal);

        initComponents();

        implanteDAO = new ImplanteDAO();

        listar(implanteDAO.listar());

    }

    /**
     * Método para listar os implantes.
     *
     * Os dados listados são colocados na tabela.
     *
     * @param implantes Lista que contém os dados a serem mostrados na tabela
     *
     */
    protected void listar(List<Implante> implantes) {

        MyTableModel myTableModel = new MyTableModel(Implante.class, implantes, tbImplantes);
        tbImplantes.setModel(myTableModel);

    }

    /**
     * Método para obter Convênio selecionado na tabela.
     *
     * @param linha linha selecionada da tabela
     *
     * @return retorna o implante na linha passada ou null caso não encontre
     *
     *
     */
    public Implante getImplante(int linha) {

        MyTableModel myTableModel = (MyTableModel) tbImplantes.getModel();

        return (Implante) myTableModel.getEntitysToList().get(linha);

    }

    /**
     * Método para obter Convênio selecionado na tabela.
     *
     * @param linha linha selecionada da tabela
     *
     * @return retorna o implante na linha passada ou null caso não encontre
     *
     *
     */
    public ProdutoUsado getProdutoUsado(int linha) {

        MyTableModel myTableModel = (MyTableModel) tbProdutosUsados.getModel();

        return (ProdutoUsado) myTableModel.getEntitysToList().get(linha);

    }

    public void listarProdutos() {

        int linha = tbImplantes.getSelectedRow();

        MyTableModel myTableModel = new MyTableModel(ProdutoUsado.class, new ProdutoUsadoDAO().listar(getImplante(linha)), tbProdutosUsados);
        tbProdutosUsados.setModel(myTableModel);

    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        tbImplantes = new javax.swing.JTable();
        btnNovo = new javax.swing.JButton();
        btnEditar = new javax.swing.JButton();
        btnExcluir = new javax.swing.JButton();
        jScrollPane2 = new javax.swing.JScrollPane();
        tbProdutosUsados = new javax.swing.JTable();
        jLabel1 = new javax.swing.JLabel();
        btnNovoProduto = new javax.swing.JButton();
        btnExcluirProduto = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        tbImplantes.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {},
                {},
                {},
                {}
            },
            new String [] {

            }
        ));
        tbImplantes.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tbImplantesMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(tbImplantes);

        btnNovo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/incluir.png"))); // NOI18N
        btnNovo.setText("Novo");
        btnNovo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnNovoActionPerformed(evt);
            }
        });

        btnEditar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/editar.png"))); // NOI18N
        btnEditar.setText("Editar");
        btnEditar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEditarActionPerformed(evt);
            }
        });

        btnExcluir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/excluir.png"))); // NOI18N
        btnExcluir.setText("Excluir");
        btnExcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnExcluirActionPerformed(evt);
            }
        });

        tbProdutosUsados.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {},
                {},
                {},
                {}
            },
            new String [] {

            }
        ));
        jScrollPane2.setViewportView(tbProdutosUsados);

        jLabel1.setText("Produtos Usados");

        btnNovoProduto.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/incluir.png"))); // NOI18N
        btnNovoProduto.setText("Novo");
        btnNovoProduto.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnNovoProdutoActionPerformed(evt);
            }
        });

        btnExcluirProduto.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/excluir.png"))); // NOI18N
        btnExcluirProduto.setText("Excluir");
        btnExcluirProduto.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnExcluirProdutoActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 630, Short.MAX_VALUE)
                    .addComponent(jScrollPane2)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addGap(0, 0, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGap(0, 0, Short.MAX_VALUE)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                .addComponent(btnNovo, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(btnEditar, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(btnExcluir, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                .addComponent(btnNovoProduto, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(btnExcluirProduto, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)))))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 159, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnNovo)
                    .addComponent(btnEditar)
                    .addComponent(btnExcluir))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jLabel1)
                .addGap(9, 9, 9)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnNovoProduto)
                    .addComponent(btnExcluirProduto))
                .addContainerGap())
        );

        setSize(new java.awt.Dimension(666, 438));
        setLocationRelativeTo(null);
    }// </editor-fold>//GEN-END:initComponents

    private void btnNovoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNovoActionPerformed

        ImplanteView implanteView = new ImplanteView(this, true, new Implante(), "ADD");

        implanteView.setTitle("Implante");

        implanteView.setVisible(true);

    }//GEN-LAST:event_btnNovoActionPerformed

    private void btnEditarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEditarActionPerformed

        int linha = tbImplantes.getSelectedRow();

        if (linha >= 0) {

            ImplanteView implanteView = new ImplanteView(this, true, getImplante(linha), "EDIT");

            implanteView.setTitle("Implante");

            implanteView.setVisible(true);

        } else {

            Mensagem.novaMensagem("Selecione um registro",
                    "Selecione um registro para editar",
                    JOptionPane.WARNING_MESSAGE);

        }
    }//GEN-LAST:event_btnEditarActionPerformed

    private void btnExcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnExcluirActionPerformed

        int linha = tbImplantes.getSelectedRow();

        if (linha >= 0) {

            int resultado = Mensagem.novaMensagemConfirmacao("Deseja excluir esse registro?", "Excluir?");

            if (resultado == JOptionPane.YES_OPTION) {

                if (!implanteDAO.excluir(getImplante(linha))) {

                    Mensagem.novaMensagem("Ooops!", "Essa exclusão não pode ser efetuada."
                            + "\nVerifique se o implante possui produtos", linha);

                }

                listar(implanteDAO.listar());

            }

        } else {

            Mensagem.novaMensagem("Selecione um registro",
                    "Selecione um registro para excluir",
                    JOptionPane.WARNING_MESSAGE);

        }
    }//GEN-LAST:event_btnExcluirActionPerformed

    private void btnNovoProdutoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNovoProdutoActionPerformed

        int linha = tbImplantes.getSelectedRow();

        if (linha >= 0) {

            ProdutoUsado produtoUsado = new ProdutoUsado();

            produtoUsado.setImplante(getImplante(linha));

            ProdutoUsadoView produtoUsadoView = new ProdutoUsadoView(this, true, produtoUsado);

            produtoUsadoView.setTitle("Produto");

            produtoUsadoView.setVisible(true);

        } else {

            Mensagem.novaMensagem("Selecione um implante",
                    "É necessário selecionar um implante para inserir produtos",
                    JOptionPane.WARNING_MESSAGE);

        }

    }//GEN-LAST:event_btnNovoProdutoActionPerformed

    private void btnExcluirProdutoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnExcluirProdutoActionPerformed

        int linha = tbProdutosUsados.getSelectedRow();

        if (linha >= 0) {

            int resultado = Mensagem.novaMensagemConfirmacao("Deseja excluir esse registro?", "Excluir?");

            if (resultado == JOptionPane.YES_OPTION) {

                ProdutoUsado produtoUsado = getProdutoUsado(linha);

                Produto produto = produtoUsado.getProduto();

                produto.setQuantidade(produto.getQuantidade() + produtoUsado.getQuantidade());

                new ProdutoDAO().atualizar(produto);

                new ProdutoUsadoDAO().excluir(produtoUsado);

                listarProdutos();

            }

        } else {

            Mensagem.novaMensagem("Selecione um produto",
                    "Selecione um produto para excluir",
                    JOptionPane.WARNING_MESSAGE);

        }

    }//GEN-LAST:event_btnExcluirProdutoActionPerformed

    private void tbImplantesMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tbImplantesMouseClicked

        listarProdutos();

    }//GEN-LAST:event_tbImplantesMouseClicked

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnEditar;
    private javax.swing.JButton btnExcluir;
    private javax.swing.JButton btnExcluirProduto;
    private javax.swing.JButton btnNovo;
    private javax.swing.JButton btnNovoProduto;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTable tbImplantes;
    private javax.swing.JTable tbProdutosUsados;
    // End of variables declaration//GEN-END:variables
}
